branch coverage
コード中のすべての分岐が少なくとも1回は実行されたかを測定するカバレッジ指標
$ \mathrm{coverage} = \frac{\mathrm{testによって経由された経路の数}}{\mathrm{分岐経路の総数}}
「分岐」というのは条件分岐のこと
基本概念
code:typescript
function example(a: boolean, b: boolean) {
if (a) {
doA(); // Branch 1: a === true
} else {
doB(); // Branch 2: a === false
}
if (b) {
doC(); // Branch 3: b === true
}
// Branch 4: b === false(何もしないケース)
}
この関数には4つの分岐がある。example(true, true) だけだと Branch 2, 4 が未実行で 50%。
code:typescript
const result = isValid ? process(data) : fallback();
Branch Coverage: isValid === true と isValid === false の両方を通さないと100%にならない
同様に:
code:typescript
if (a && b) {
doSomething();
}
Line Coverageは a=true, b=true の1テストで doSomething() の行をカバーできる
Branch Coverageは ifに入るケースと入らないケースの両方が必要
他のカバレッジ指標との関係
table:_
指標 測定対象 厳しさ
Statement/Line 各行の実行有無 低
Branch 各分岐の実行有無 中
Condition 各条件式のtrue/false 高
MC/DC 各条件が独立して結果に影響するか 最高
Branch Coverage 100% ⊃ Line Coverage 100% だが、逆は成り立たない。
code:typescript
if (a || b) { ... }
Branch Coverage: ifに入る/入らないの2分岐 → (true, false) と (false, false) で100%
Condition Coverage: aのtrue/false、bのtrue/false を各々カバー → 最低でも aとbそれぞれにtrue/falseが必要